stdlib.h
এর সোর্টিং এবং সার্চিং ফাংশনসমূহstdlib.h
হেডার ফাইলটিতে সোর্টিং (Sorting) এবং সার্চিং (Searching) অপারেশন সম্পাদনের জন্য দুটি গুরুত্বপূর্ণ ফাংশন রয়েছে: qsort()
এবং **bsearch()
**। এই ফাংশনগুলো দ্রুত এবং কার্যকরীভাবে এরে বা ডেটা সংগ্রহের উপর কাজ করে, যা প্রোগ্রামের কার্যকারিতা উন্নত করতে সহায়ক।
qsort()
– কুইক সোর্ট ফাংশনqsort()
ফাংশনটি একটি এরে বা ডেটা এলিমেন্টকে কুইক সোর্ট (Quick Sort) পদ্ধতিতে সজ্জিত বা সঠিকভাবে সাজানোর জন্য ব্যবহৃত হয়। এটি যে কোন ধরনের ডেটা টাইপের উপর কাজ করতে সক্ষম এবং এটি কাস্টম কম্পারেটর ফাংশন ব্যবহার করে এরে সাজাতে পারে।
void qsort(void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
base
: এরের প্রথম এলিমেন্টের পয়েন্টার।num
: এরের মোট এলিমেন্ট সংখ্যা।size
: প্রতিটি এলিমেন্টের সাইজ (বাইটে)।compar
: কম্পারেটর ফাংশনের পয়েন্টার, যা দুটি এলিমেন্ট তুলনা করতে ব্যবহৃত হয়।নিচের উদাহরণে qsort()
ফাংশন ব্যবহার করে ইন্টিজার এরে সাজানো হয়েছে।
#include <stdio.h>
#include <stdlib.h>
// কম্পারেটর ফাংশন: ছোট থেকে বড় ক্রমে সাজানোর জন্য
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
int main() {
int arr[] = {5, 2, 8, 1, 4};
int n = sizeof(arr) / sizeof(arr[0]);
// `qsort()` ফাংশন ব্যবহার করে সজ্জিত করা
qsort(arr, n, sizeof(int), compare);
// সজ্জিত এরে প্রদর্শন
printf("Sorted array: ");
for (int i = 0; i < n; i++) {
printf("%d ", arr[i]);
}
return 0;
}
উপরের উদাহরণে compare()
ফাংশনটি দুটি সংখ্যাকে তুলনা করে এবং ছোট থেকে বড় ক্রমে এরে সাজায়। qsort()
ফাংশনটি একটি জেনেরিক ফাংশন, যা যেকোনো ডেটা টাইপের উপর কাজ করতে সক্ষম, যদি সঠিকভাবে কম্পারেটর ফাংশন সরবরাহ করা হয়।
bsearch()
– বাইনারি সার্চ ফাংশনbsearch()
ফাংশনটি একটি সজ্জিত (sorted) এরে থেকে একটি নির্দিষ্ট এলিমেন্ট খুঁজে বের করতে ব্যবহৃত হয়। এটি বাইনারি সার্চ অ্যালগরিদম ব্যবহার করে কাজ করে, যা দ্রুততম সার্চিং অপারেশনগুলির মধ্যে অন্যতম। এই ফাংশনটি প্রোগ্রামের কার্যকারিতা উন্নত করে, তবে এটি শুধুমাত্র সজ্জিত (sorted) এরে-এর উপর কাজ করে।
void *bsearch(const void *key, const void *base, size_t num, size_t size, int (*compar)(const void *, const void *));
key
: খোঁজা এলিমেন্টের পয়েন্টার।base
: এরে-এর প্রথম এলিমেন্টের পয়েন্টার।num
: এরে-এর মোট এলিমেন্ট সংখ্যা।size
: প্রতিটি এলিমেন্টের সাইজ (বাইটে)।compar
: কম্পারেটর ফাংশনের পয়েন্টার, যা key
এবং এরে এলিমেন্ট তুলনা করতে ব্যবহৃত হয়।নিচের উদাহরণে bsearch()
ফাংশন ব্যবহার করে একটি সজ্জিত ইন্টিজার এরে থেকে নির্দিষ্ট একটি সংখ্যা খোঁজা হয়েছে।
#include <stdio.h>
#include <stdlib.h>
// কম্পারেটর ফাংশন: ছোট থেকে বড় ক্রমে তুলনা করার জন্য
int compare(const void *a, const void *b) {
return (*(int *)a - *(int *)b);
}
int main() {
int arr[] = {1, 2, 4, 5, 8};
int n = sizeof(arr) / sizeof(arr[0]);
int key = 4;
// `bsearch()` ফাংশন ব্যবহার করে এলিমেন্ট খোঁজা
int *item = (int *)bsearch(&key, arr, n, sizeof(int), compare);
if (item != NULL) {
printf("Element found: %d\n", *item);
} else {
printf("Element not found\n");
}
return 0;
}
উপরের উদাহরণে, bsearch()
ফাংশনটি key
হিসেবে 4
এর মান খোঁজে এবং যদি তা এরে-এ উপস্থিত থাকে, তাহলে এটি তার পয়েন্টার রিটার্ন করে। যদি এরে-এ key
উপস্থিত না থাকে, তাহলে এটি NULL
রিটার্ন করে।
ফাংশন | কাজ | প্রয়োজন |
---|---|---|
qsort() | এরে বা ডেটা সজ্জিত করে (Quick Sort) | সজ্জিত ডেটা প্রয়োজন |
bsearch() | সজ্জিত ডেটা থেকে নির্দিষ্ট এলিমেন্ট খোঁজে (Binary Search) | সজ্জিত ডেটা |
এই ফাংশনগুলো ব্যবহার করে সি প্রোগ্রামিংয়ে ডেটা সজ্জিত ও খোঁজার কাজ দ্রুত এবং সহজে সম্পন্ন করা যায়।
common.read_more